/**
 * 窗口管理模块
 * 集中管理所有窗口的创建和引用
 */
import { BrowserWindow, shell } from 'electron'
// import { app } from 'electron'
import { join } from 'path'
import { is } from '@electron-toolkit/utils'
import icon from '../../../resources/icon.png?asset'

// 窗口引用
let mainWindow: BrowserWindow | null = null
let splashWindow: BrowserWindow | null = null

// 获取 preload 脚本路径
function getPreloadPath(): string {
  // 开发环境
  if (is.dev) {
    console.log("开发环境");
  }else{
    console.log("生产环境")
  }
  
  // 生产环境
  return join(__dirname, '../../preload/index.js')
}

/**
 * 创建启动窗口
 */
export function createSplashWindow(): BrowserWindow {
  // 如果启动窗口已存在且未被销毁，直接返回
  if (splashWindow && !splashWindow.isDestroyed()) {
    splashWindow.focus()
    return splashWindow
  }

  // 获取 preload 脚本路径
  const preloadPath = getPreloadPath()
  console.log('启动窗口 preload 路径:', preloadPath)
  
  // 创建启动窗口
  splashWindow = new BrowserWindow({
    width: 420,
    height: 420,
    transparent: true,
    frame: false,
    resizable: false,
    center: true,
    show: false,
    skipTaskbar: true,
    backgroundColor: '#00FFFFFF', // 完全透明背景
    roundedCorners: true, // 圆角
    hasShadow: true, // 窗口阴影
    icon, // 设置图标
    webPreferences: {
      preload: preloadPath,
      sandbox: false,
      // 禁用同源策略，允许加载本地文件
      webSecurity: false
    }
  })

  // 窗口准备好时显示
  splashWindow.on('ready-to-show', () => {
    splashWindow?.show()

    // 打开开发者工具
    if (is.dev) {
      splashWindow?.webContents.openDevTools({ mode: 'detach' })
    }
  })

  // 窗口关闭时清理引用
  splashWindow.on('closed', () => {
    splashWindow = null
  })

  // 加载启动页面 - 使用单独的HTML文件
  const splashPath = join(__dirname, '../../renderer/splash.html')
  console.log('启动页面路径:', splashPath)
  
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    // 开发环境下，使用开发服务器的URL
    const devServerUrl = process.env['ELECTRON_RENDERER_URL']
    console.log('开发服务器 URL:', devServerUrl)
    splashWindow.loadURL(`${devServerUrl}/splash.html`)
  } else {
    // 生产环境下，加载本地文件
    splashWindow.loadFile(splashPath)
  }

  return splashWindow
}

/**
 * 创建主窗口
 */
export function createMainWindow(): BrowserWindow {
  // 如果主窗口已存在且未被销毁，直接返回
  if (mainWindow && !mainWindow.isDestroyed()) {
    mainWindow.focus()
    return mainWindow
  }

  // 获取 preload 脚本路径
  const preloadPath = getPreloadPath()
  console.log('主窗口 preload 路径:', preloadPath)
  
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({
    width: 1200,
    height: 800,
    minWidth: 800,
    minHeight: 600,
    show: false,
    autoHideMenuBar: true,
    icon, // 设置图标
    webPreferences: {
      preload: preloadPath,
      sandbox: false
    }
  })

  // 窗口准备好时显示
  mainWindow.on('ready-to-show', () => {
    mainWindow?.show()
    // 关闭启动窗口
    closeSplashWindow()
  })

  // 窗口关闭时清理引用
  mainWindow.on('closed', () => {
    mainWindow = null
  })

  // 处理外部链接
  mainWindow.webContents.setWindowOpenHandler((details) => {
    shell.openExternal(details.url)
    return { action: 'deny' }
  })

  // 加载页面
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    mainWindow.loadURL(`${process.env['ELECTRON_RENDERER_URL']}/#/welcome`)
  } else {
    mainWindow.loadFile(join(__dirname, '../../renderer/index.html'), {
      hash: 'welcome'
    })
  }

  // 开发环境下自动打开开发者工具
  if (is.dev) {
    mainWindow.webContents.openDevTools()
  }

  return mainWindow
}

/**
 * 关闭启动窗口
 */
export function closeSplashWindow(): void {
  if (splashWindow && !splashWindow.isDestroyed()) {
    splashWindow.close()
    splashWindow = null
  }
}

/**
 * 获取主窗口
 */
export function getMainWindow(): BrowserWindow | null {
  return mainWindow
}

/**
 * 获取启动窗口
 */
export function getSplashWindow(): BrowserWindow | null {
  return splashWindow
}

/**
 * 创建设置窗口
 */
export function createSettingsWindow(): BrowserWindow {
  const settingsWindow = new BrowserWindow({
    width: 800,
    height: 600,
    parent: mainWindow || undefined,
    modal: true,
    show: false,
    autoHideMenuBar: true,
    icon, // 设置图标
    webPreferences: {
      preload: getPreloadPath(),
      sandbox: false
    }
  })

  // 窗口准备好时显示
  settingsWindow.on('ready-to-show', () => {
    settingsWindow.show()
  })

  // 加载页面
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    settingsWindow.loadURL(`${process.env['ELECTRON_RENDERER_URL']}/#/settings`)
  } else {
    settingsWindow.loadFile(join(__dirname, '../../renderer/index.html'), {
      hash: 'settings'
    })
  }

  return settingsWindow
}

/**
 * 创建关于窗口
 */
export function createAboutWindow(): BrowserWindow {
  const aboutWindow = new BrowserWindow({
    width: 400,
    height: 400,
    parent: mainWindow || undefined,
    modal: true,
    resizable: false,
    show: false,
    autoHideMenuBar: true,
    icon, // 设置图标
    webPreferences: {
      preload: getPreloadPath(),
      sandbox: false
    }
  })

  // 窗口准备好时显示
  aboutWindow.on('ready-to-show', () => {
    aboutWindow.show()
  })

  // 加载页面
  if (is.dev && process.env['ELECTRON_RENDERER_URL']) {
    aboutWindow.loadURL(`${process.env['ELECTRON_RENDERER_URL']}/#/about`)
  } else {
    aboutWindow.loadFile(join(__dirname, '../../renderer/index.html'), {
      hash: 'about'
    })
  }

  return aboutWindow
} 